package br.ifpb.edu.xmi.parser;

import java.util.ArrayList;

import br.ifpb.edu.uml.elements.Class;

public class ReturnInfo {
	
	/**
	 * Este metodo recebe uma lista de
	 * 
	 * @param dc
	 *            Este eh o array contendo a lista de classes do diagrama
	 */
	public String printInfo( ArrayList<Class> dc  ) {
		String retorno = new String( );
		for (int k = 0; k < dc.size(); k++) {
			Class aux = dc.get(k);
			retorno += "\n\n> ----------------------------------------";
			retorno += "\nNome da "
					+ (aux.getType() ? "Classe" : "Interface") + " " + k + ": "
					+ aux.getClassName();
			retorno += "\nA "
					+ (aux.getType() ? "Classe" : "Interface") + " tem: "
					+ aux.numberAttributes() + " atributo(s)";
			for (int i = 0; i < aux.numberAttributes(); i++) {
			retorno += "\nAtributo numero: " + i + "\n";
				retorno += "Modificador de acesso: " + aux.getAttribute(i).getAccessModifier()
						+ "\nTipo: " + aux.getAttribute(i).getType() + "\nAssinatura: "
						+ aux.getAttribute(i).getName() + ";";
			}

			retorno += "\n\nA "
					+ (aux.getType() ? "Classe" : "Interface") + " tem: "
					+ aux.numberMethods() + " metodo(s)";
			for (int i = 0; i < aux.numberMethods(); i++) {
				retorno += "\nMetodo numero: " + i + "\n";
				retorno += "Modificador de acesso: " + aux.getMethods(i).getAcessModified()
						+ "\nTipo de retorno: " + aux.getMethods(i).getTypeReturn() + "\nAssinatura: "
						+ aux.getMethods(i).getName() + "( ";
				for (int x = 0; x < aux.getMethods(i).getSize(); x++) {
					retorno += aux.getMethods(i).getAttributes(x).getType()
									+ " "
									+ aux.getMethods(i).getAttributes(x).getName();
					if (x != (aux.getMethods(i).getSize() - 1))
						retorno += ", ";
				}
				retorno += " );\n";
			}
			retorno += "\nA "
					+ (aux.getType() ? "Classe \"" : "Interface \"") + aux.getClassName() + "\" tem: "
					+ aux.numberRelationships() + " relacionamento(s)";
			for (int i = 0; i < aux.numberRelationships(); i++) {
				retorno += "\nRelacionamento numero: " + i;
				retorno += "\nTipo de relacionamento: " + aux.getRelationships(i).getRelationType();
				retorno += "\nClasse mãe: " + aux.getRelationships(i).getMotherClass();
				retorno += "\nMultiplicidade: " + aux.getRelationships(i).getMultiplicity();
			}
		}
		return retorno;
	}
	
	/**
	 * Este metodo recebe uma lista de classes e retorna os atributos
	 * 
	 * @param dc
	 *            Este eh o array contendo a lista de classes do diagrama
	 */
	public String printAttributes( ArrayList<Class> dc ) {
		String retorno = new String( );
		for (int k = 0; k < dc.size(); k++) {
			Class aux = dc.get(k);
			retorno += "\n\n> ----------------------------------------";
			retorno += "\nNome da "
					+ (aux.getType() ? "Classe" : "Interface") + " " + k + ": "
					+ aux.getClassName();
			retorno += "\nA "
					+ (aux.getType() ? "Classe" : "Interface") + " tem: "
					+ aux.numberAttributes() + " atributo(s)";
			for (int i = 0; i < aux.numberAttributes(); i++) {
			retorno += "\nAtributo numero: " + i + "\n";
				retorno += "Modificador de acesso: " + aux.getAttribute(i).getAccessModifier()
						+ "\nTipo: " + aux.getAttribute(i).getType() + "\nAssinatura: "
						+ aux.getAttribute(i).getName() + ";";
			}
		}
		return retorno;
	}
	
	/**
	 * Este metodo recebe uma lista de classes e retorna os metodos
	 * 
	 * @param dc
	 *            Este eh o array contendo a lista de classes do diagrama
	 */
	public String printMethods( ArrayList<Class> dc  ) {
		String retorno = new String( );
		for (int k = 0; k < dc.size(); k++) {
			Class aux = dc.get(k);
			retorno += "\n\n> ----------------------------------------";
			retorno += "\n\nA "
					+ (aux.getType() ? "Classe" : "Interface") + " tem: "
					+ aux.numberMethods() + " metodo(s)";
			for (int i = 0; i < aux.numberMethods(); i++) {
				retorno += "\nMetodo numero: " + i + "\n";
				retorno += "Modificador de acesso: " + aux.getMethods(i).getAcessModified()
						+ "\nTipo de retorno: " + aux.getMethods(i).getTypeReturn() + "\nAssinatura: "
						+ aux.getMethods(i).getName() + "( ";
				for (int x = 0; x < aux.getMethods(i).getSize(); x++) {
					retorno += aux.getMethods(i).getAttributes(x).getType()
									+ " "
									+ aux.getMethods(i).getAttributes(x).getName();
					if (x != (aux.getMethods(i).getSize() - 1))
						retorno += ", ";
				}
				retorno += " );\n";
			}
		}
		return retorno;
	}
	
	
	/**
	 * Este metodo recebe uma lista de classes e retorna os relacionamentos
	 * 
	 * @param dc
	 *            Este eh o array contendo a lista de classes do diagrama
	 */
	public String printRelationships( ArrayList<Class> dc  ) {
		String retorno = new String( );
		for (int k = 0; k < dc.size(); k++) {
		Class aux = dc.get(k);
		retorno += "\n\n> ----------------------------------------";
		retorno += "\nA "
				+ (aux.getType() ? "Classe \"" : "Interface \"") + aux.getClassName() + "\" tem: "
				+ aux.numberRelationships() + " relacionamento(s)";
		for (int i = 0; i < aux.numberRelationships(); i++) {
			retorno += "\nRelacionamento numero: " + i;
			retorno += "\nTipo de relacionamento: " + aux.getRelationships(i).getRelationType();
			retorno += "\nClasse mãe: " + aux.getRelationships(i).getMotherClass();
			retorno += "\nMultiplicidade: " + aux.getRelationships(i).getMultiplicity();
		}
		}
		return retorno;
	}
	
	
}
